--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / docs / agents / skills / lxmf-messaging / SKILL.md
docs/agents/skills/lxmf-messaging/SKILL.md dev (af76f09d) Text, 2.99 KB
Skill: lxmf-messaging
Change LXMF messaging, stamps, propagation, or attachments without breaking local-first mesh delivery or identity scoping.
When to use
• Outbound/inbound LXMF, conversations, receipts, stamps
• Propagation nodes, sync, inbound cancel, transfer limits
• Attachments, images, RNCP handoff from chat
• Config knobs that map to LXMRouter behaviour
Intent
LXMF is store-and-forward mail on Reticulum. Do not require clearnet, DNS, or a central API to deliver messages. Address peers by destination hash and aspect T383838lxmf.delivery.
Key paths
┌──────────────────────────┬───────────────────────────────────────────────────────────────────────┐
│ Area │ Path │
├──────────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ Identity / router wiring │ T383838meshchatx/src/backend/identity_context.py │
│ Message handler │ T383838meshchatx/src/backend/message_handler.py (and related) │
│ HTTP/WS surface │ T383838meshchatx/meshchat.py │
│ Inbound cancel helpers │ T383838meshchatx/src/backend/meshchat_utils.py (T383838list_inbound_deliveries, T383838ca… │
│ Frontend conversations │ T383838meshchatx/src/frontend/components/ conversation viewers │
│ Config │ config managers / settings UI for LXMF options │
└──────────────────────────┴───────────────────────────────────────────────────────────────────────┘
LXMF 1.1 / RNS 1.4 inbound cancel
Large inbound LXMF deliveries use RNS Resources. LXMF exposes:
• T383838LXMRouter.inbound_resources() / T383838inbound_count()
• T383838cancel_inbound(resource_hash) and T383838cancel_all_inbound()
MeshChatX surfaces them as:
• Status: T383838inbound_delivery_count and T383838inbound_deliveries on T383838/api/v1/lxmf/propagation-node/status
• Cancel: T383838POST /api/v1/lxmf/propagation-node/cancel-inbound with optional T383838{ "resource_hash": "..." }
• Header UI in T383838App.vue when active inbound transfers exist
Outbound cancel remains T383838POST /api/v1/lxmf-messages/{hash}/cancel via T383838cancel_outbound.
Keep minimum versions: T383838rns>=1.4.1, T383838lxmf>=1.1.0.
Gates
1. Missing path: request path, allow propagate, surface recoverable state. No infinite spinner for LoRa-class delay.
2. Payload size justified. Large files use RNCP or explicit transfer tools, not giant chat blobs.
3. No cross-identity inbox or cache sharing.
4. Do not log private keys or unredacted message bodies by default.
5. Stamp and validation settings must match installed lxmf/rns versions.
Verification
Prefer focused backend tests around the changed manager, plus frontend tests when UI sends or displays messages.
T282828
uv run pytest tests/backend/test_phased_startup_guards.py -q --tbTff7b72=short
Also: T383838reticulum-design-gates, T383838deferred-network-startup, T383838identity-switch-teardown.
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────